#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <iostream>
#include <map>
using namespace std;
//边数
int m;
//节点数
int n;
string s,e;
map<string,int> sea;
const int MAXN=180;
const int INF=0x3f3f3f3f;
int costmap[MAXN][MAXN];
int lowcost[MAXN];
bool vis[MAXN];
void Dijkstra(int s){
    //初始化
    for(int i=1;i<n;i++){
        lowcost[i]=INF;
        vis[i]=false;
    }
    //注意这个
    lowcost[s]=0;
    for(int i=1;i<n;i++){
        int k=-1;
        int Min=INF;
        //找出未访问的最小lowcost和位置
        for(int j=1;j<n;j++){
            if(!vis[j] && lowcost[j]<Min){
                Min=lowcost[j];
                k=j;
            }
        }
        if(k==-1){
            break;
        }
        vis[k]=true;
        for(int j=1;j<n;j++){
            //走k这条路更快
            if(!vis[j] && lowcost[k]+costmap[k][j]<lowcost[j]){
                lowcost[j]=lowcost[k]+costmap[k][j];
            }
        }
    }
}
int main(void){
    while(~scanf("%d",&m)){
        if(m==-1){
            break;
        }
        sea.clear();
        cin >> s >> e;
        n=1;
        if(sea.find(s)==sea.end()){
            sea[s]=n++;
        }
        if(sea.find(e)==sea.end()){
            sea[e]=n++;
        }
        //cout << s << e << endl;
        string st,et;
        int cost;
        memset(costmap,INF,sizeof(costmap));
        while(m--){
            cin >> st >> et >> cost;
            if(sea.find(st)==sea.end()){
                sea[st]=n++;
            }
            if(sea.find(et)==sea.end()){
                sea[et]=n++;
            }
            costmap[sea[st]][sea[et]]=cost;
            costmap[sea[et]][sea[st]]=cost;
        }
        // for(int i=1;i<=n;i++){
        //     for(int j=1;j<=n;j++){
        //         printf("%d ",costmap[i][j]);
        //     }
        //     printf("\n");
        // }
        Dijkstra(sea[s]);
        // for(int i=1;i<n;i++){
        //     printf("%d ",lowcost[i]);
        // }
        // printf("\n");
        if(s.compare(e)==0){
            printf("0\n");
        }
        else{
            if(lowcost[sea[e]]!=INF){
                printf("%d\n",lowcost[sea[e]]);
            }
            else{
                printf("-1\n");
            }
        }
    }
    return 0;
}
